package com.jianhua.backend.controller;

import com.jianhua.backend.common.R;
import com.jianhua.backend.domain.dto.CreateOrderDto;
import com.jianhua.backend.domain.dto.OrderDto;
import com.jianhua.backend.domain.entity.Orders;
import com.jianhua.backend.domain.vo.PageVo;
import com.jianhua.backend.request.BuyRequest;
import com.jianhua.backend.request.OrderDetailResponse;
import com.jianhua.backend.service.OrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * <p>
 * 存储用户订单的核心信息 前端控制器
 * </p>
 *
 * @author author
 * @since 2025-07-02
 */
@RestController
@RequestMapping("/orders")
public class OrdersController {

    @Autowired
    private OrdersService ordersService;

    // 下单接口（最简化）
    @PostMapping("/buy")
    public String buy() {
        String orderId = ordersService.createOrder();
        return "订单创建成功，订单ID：" + orderId;
    }

    // 支付接口（最简化）
    @PostMapping("/pay")
    public String pay(@RequestParam("orderId") String orderId) {
        boolean result = ordersService.payOrder(orderId);
        return result ? "支付成功" : "支付失败";
    }

    // 获取订单详情
    @GetMapping("/{id}")
    public R getOrderDetail(@PathVariable String id) {
        OrderDetailResponse orderDetail = ordersService.getOrderDetail(id);
        return R.success(orderDetail);
    }

    /**
     * 获取指定ID的订单列表
     * 根据传入的ID，查询并返回对应的订单列表
     *
     * @param id 用户ID，用于查询该用户的订单列表
     * @return 返回查询到的订单列表
     */
    @PostMapping("/list/{id}")
    public R listOrder(@PathVariable Integer id) {
        List<Orders> orders = ordersService.listOrders(id);
        return R.success(orders);
    }

    /**
     * 列出订单接口
     * 根据传入的订单条件，查询并返回订单分页列表
     *
     * @param orderDto 订单查询条件，包含订单状态、下单时间等
     * @return 返回查询结果，包含订单分页信息和订单列表
     */
    @PostMapping("/list")
    public R listOrders(@RequestBody OrderDto orderDto){
        PageVo<Orders> ordersPageVo = ordersService.listOrders(orderDto);
        return R.success(ordersPageVo);
    }

    /**
     * 创建订单接口
     * 该接口用于接收创建订单的请求，并调用服务层完成订单的创建操作。
     *
     * @param createOrderDto 创建订单的请求数据，包含订单的相关信息
     * @return 返回操作结果，成功则返回成功信息
     */
    @PostMapping("/create")
    public R createOrder(@RequestBody CreateOrderDto createOrderDto) {
        ordersService.createOrder(createOrderDto);
        return R.success(null);
    }

}
